home *** CD-ROM | disk | FTP | other *** search
/ Input 64 / Input_64_87-08_1987_Verlag_Heinz_Weise_de.d64 / assembler 2 < prev    next >
Text File  |  2023-02-26  |  2KB  |  89 lines

  1. ;BASIC-Erweiterung Hex-Zahlen
  2. ;_
  3. :chrget = $0073 ;Zeichen aus BASIC-Text lesen
  4. :chrgot = $0079 ;letztes Zeichen nochmal lesen
  5.  
  6. :fctvec = $30a  ;Vektor fuer Ausdruck auswerten
  7.  
  8. :tofac  = $bc49 ;positive Integerzahl in FAC
  9.  
  10.         org $801 ;Start am BASIC-Anfang
  11.  
  12. :next   w   basend ;Pointer auf Ende
  13. :linnum w   1987   ;Zeilennummer
  14. :sys    b   $9e    ;Token fuer SYS
  15. :adrs   b   "2070" ;Adresse im Klartext
  16. :linend b   0      ;Kennzeichen fuer Zeilenende
  17. :basend w   0      ;Kennzeichen fuer Programmende
  18.  
  19.         s   2070-*
  20.  
  21. :init   lda #<new ;BASIC-Anfang hinter
  22.         sta $2b   ;Programm verlegen
  23.         lda #>new
  24.         sta $2c
  25.  
  26.         lda fctvec   ;zeigt Vektor schon
  27.         ldy fctvec+1 ;auf eigene Routine?
  28.         cmp #<function
  29.         bne biegen   ;nein
  30.         cpy #>function
  31.         beq okay     ;ja, dann so lassen
  32.         sta rueck+1  ;sonst retten
  33.         sty rueck+2
  34. :biegen lda #<function ;und auf eigene
  35.         sta fctvec     ;Routine verbiegen
  36.         lda #>function
  37.         sta fctvec+1
  38. :okay   jsr $a659    ;RESTORE
  39.         jmp $a7ae    ;RUN
  40.  
  41. ;Hier beginnt die Hex-Eingabe-Routine
  42. ;_
  43. :function jsr chrget ;Zeichen holen
  44.         cmp #'$   ;Kennzeichen fuer Hex
  45.         beq hexin
  46.         ldx $7a   ;sonst CHRGET-Pointer
  47.         bne nodec ;wiederherstellen
  48.         dec $7b
  49. :nodec  dec $7a
  50. :rueck  jmp $ae86 ;und zur alten Adtresse
  51.  
  52. :hexin  lda #$00
  53.         sta $0d   ;Ergebnis wird numerisch
  54.         sta argu  ;loeschen
  55.         sta argu+1
  56. :mloop  jsr chrget;naechstes Zeichen
  57.         cmp #'0
  58.         bcc raus  ;kleiner als Ziffern
  59.         cmp #'9+1
  60.         bcc add   ;Ziffer
  61.         cmp #'a
  62.         bcc raus  ;kein Buchstabe
  63.         cmp #'f+1
  64.         bcs raus  ;keine Hex-Ziffer
  65.         sec
  66.         sbc #7    ;Offset fuer a
  67. :add    and #$0f  ;unteres Nibble maskieren
  68.         ldx #4    ;vier Bits
  69. :adlop  asl argu  ;links-schieben
  70.         rol argu+1
  71.         dex
  72.         bne adlop
  73.         ora argu  ;gelesene Ziffer addieren
  74.         sta argu
  75.         jmp mloop ;naechstes Zeichen
  76.  
  77. :raus   lda argu+1
  78.         ldy argu
  79.         sta $62   ;fuer TOFAC
  80.         sty $63
  81.         ldx #$90  ;auch fuer TOFAC
  82.         sec
  83.         jmp tofac
  84.  
  85. :argu   w   0
  86.  
  87. :ende   b   0
  88. :new    w   0
  89.  
  90.